package com.taotao.cart.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import com.taotao.pojo.TbItem;
import com.taotao.service.ItemService;
import com.taotao.utils.CookieUtils;
import com.taotao.utils.JsonUtils;

/**
 * 购物车管理的controller
 * @author created by wq
 * @date   Sep 6, 2017---6:39:49 PM
 * @return
 * @throws Exception<br/>
 *==========History========== <br/>
 * taotao-cart-web Sep 6, 2017
 */
@Controller
public class CartController {

	@Value("${COOKIE_CART_PRE}")
	private String COOKIE_CART_PRE;
	
	@Value("${COOKIE_CART_EXPIRE}")
	private Integer COOKIE_CART_EXPIRE;
	
	@Autowired
	private ItemService itemService;
	
	@RequestMapping("cart/add/{itemId}")
	public String addCart(@PathVariable Long itemId,Integer num,
			HttpServletRequest request,HttpServletResponse response){
		//首先是从cookie中查询商品列表集合。-->抽取成公用方法
		List<TbItem> cartList = getCartList(request);
		//设置一个标志位
		Boolean flag = false;
		
		//判断在购物列表中该商品是否存在。
		//存在，直接添加到购物列表中，价格原来商品数目加上num
		for (TbItem tbItem : cartList) {
			//判断商品id是否在遍历出来的商品中存在
			if(tbItem.getId() == itemId.longValue()){
				//购物车中存在，直接添加数目
				tbItem.setNum(tbItem.getNum()+num);
				flag = true;
				break;
			}
		}
		//不存在，则需要通过itemId查询商品，将商品添加到购物列表中
		if(!flag){
			TbItem item = itemService.getItemByItemId(itemId);
			//设置商品的数量
			item.setNum(num);
			String image = item.getImage();
			if(StringUtils.isNoneBlank(image)){
				//不为空，取第一张
				item.setImage(image.split(",")[0]);
			}
			//加入到购物商品列表中
			cartList.add(item);
		}
		//然后同时需要将购物列表添加在cookie中,同时需要编码，设置cookie的有效时间
		String jsonCartList = JsonUtils.objectToJson(cartList);
		
		CookieUtils.setCookie(request, response, COOKIE_CART_PRE, jsonCartList, COOKIE_CART_EXPIRE, true);
		return "cartSuccess";
		
	}
	
	private List<TbItem> getCartList(HttpServletRequest request){
		//1.调用cookieUtils查询商品列表
		String json = CookieUtils.getCookieValue(request, COOKIE_CART_PRE, true);
		//2.判断json是否为null，若为空直接new 一个新的list集合
		if(StringUtils.isBlank(json)){
			return new ArrayList<>();
		}
		
		//3.将json转化为list集合
		List<TbItem> list = JsonUtils.jsonToList(json, TbItem.class);
		return list;
	}
}
